package baptizeattribute.utils;

import baptizeattribute.baptize.Baptize;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;


public class IOUtil {
	public static String AbsolutePath = Baptize.getMain().getDataFolder().getAbsolutePath();

	/**
	 * 返回int类型，文件不存在返回0
	 * @param where 文件路径
	 * @param name	需要的获取的名字
	 * @return
	 */
	public static int getInt(String where,String name){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return 0;
		}
		return filec.getInt(name);
	}

	public static List<String> getStringlist(String where, String name){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return null;
		}
		return filec.getStringList(name);
	}
	public static void setStringlist(String where, String name,List<String> list){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		filec.set(name,list);
		try {
			filec.save(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static float getFloat(String where,String name){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return 0;
		}
		return (float) filec.getDouble(name);
	}
	public static List<Map<?, ?>> getMapList(String where, String name){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return null;
		}
		return filec.getMapList(name);
	}
	public static Set<String> getKeys(String where, Boolean flag){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return null;
		}
		return filec.getKeys(flag);
	}

	/**
	 * 返回boolean类型，文件不存在返回false
	 * @param where 文件路径
	 * @param name	需要的获取的名字
	 * @return
	 */
	public static Boolean getBoolean(String where,String name){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return false;
		}
		return filec.getBoolean(name);
	}
	/**
	 * 返回String, 不做自定义路径处理
	 * @param where 文件路径
	 * @param name	需要的获取的名字
	 * @return
	 */
	public static String getStringPath(String where,String name){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return null;
		}
		return filec.getString(name);
	}

	/**
	 * 返回String类型，文件不存在返回null
	 * @param where 文件路径
	 * @param name	需要的获取的名字
	 * @return
	 */
	public static String getString(String where,String name){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return null;
		}
		return filec.getString(name);
	}

	/**
	 * 返回double类型，文件不存在返回-1
	 * @param where 文件路径
	 * @param name	需要的获取的名字
	 * @return
	 */
	public static double getDouble(String where,String name){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return 0;
		}
		return filec.getDouble(name);
	}
	/**
	 * 返回long类型
	 * @param where 文件路径
	 * @param name	参数名
	 * @return
	 */
	public static Long getLong(String where,String name){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return null;
		}
		return filec.getLong(name);
	}
	public static List getList(String where, String name){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return null;
		}
		return filec.getList(name);
	}
	/**
	 * 设置值，文件不存在将会自动创建
	 * @param where 文件路径
	 * @param name	文件名
	 * @param index 设置参数 
	 */
	public static void setString(String where,String name,String index){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		filec.set(name,index);
		try {
			filec.save(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void setBoolean(String where,String name,boolean index){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		filec.set(name,index);
		try {
			filec.save(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 设置值，文件不存在将会自动创建
	 * @param where 文件路径
	 * @param name	文件名
	 * @param index 设置参数 
	 */
	public static void setStinglist(String where,String name,String[] index){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		filec.set(name,index);
		try {
			filec.save(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	
	/**
	 * 设置值，文件不存在将会自动创建
	 * @param where 文件路径
	 * @param name	文件名
	 * @param index 设置参数 
	 */
	public static void setLong(String where,String name,Long index){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		filec.set(name,index);
		try {
			filec.save(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void setList(String where,String name,List index){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		filec.set(name,index);
		try {
			filec.save(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 设置值，文件不存在将会自动创建
	 * @param where 文件路径
	 * @param name	文件名
	 * @param index 设置参数 
	 */
	public static void setDouble(String where,String name,double index){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		filec.set(name,index);
		try {
			filec.save(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 设置值，文件不存在将会自动创建
	 * @param where 文件路径
	 * @param name	文件名
	 * @param index 设置参数
	 */
	public static void setInt(String where,String name,int index){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		filec.set(name,index);
		try {
			filec.save(file);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 创建文件夹
	 * @param where 路径
	 *  创建成功返回true
	 *
	 */
	public static Boolean createfile(String where){
		File file=new File(AbsolutePath+where);
		if(!file.exists()){
			file.mkdirs();
			return true;
		}
		return false;
	}
	
	/**
	 * 判断是否有这个文件或文件夹
	 * @param where
	 * @return false为不存在 true存在
	 */
	public static boolean fileExists(String where){
		File file=new File(AbsolutePath+where);
		if(!file.exists()){
			return false;
		}else{
			return true;
		}
	}

	public static Object get(String where){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return null;
		}
		return filec.get("bd1");
	}

	public static Map getValues(String where,boolean deep){
		File file=new File(AbsolutePath+where);
		FileConfiguration filec= YamlConfiguration.loadConfiguration(file);
		if(!file.exists()){
			return null;
		}
		return filec.getValues(deep);
	}

	/**
	 * 查询指定目录下是否存在某个文件
	 * @param path 目录地址
	 * @param fileName 文件名
	 * @return
	 */
	public static boolean isFile(String path , String fileName)
	{
		File file = new File(AbsolutePath+path);
		if (file.isDirectory())
		{
			for (String name : file.list())
			{
				if (fileName.equalsIgnoreCase(name))
				{
					return true;
				}
			}
		}
		return false;
	}

	/**
	 * 返回指定文件目录下的所有文件名
	 * @param path
	 * @return
	 */
	public static String[] getFileNamelist(String path)
	{
		File file = new File(AbsolutePath+path);
		String[] lists = file.list();
		return lists;
	}

}
